package cn.itcast.openai;


import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.chat.completions.*;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class AICourseAssistant {

    private final OpenAIClient client;

    private final List<ChatCompletionMessageParam> chatHistory = new ArrayList<>();

    // 系统提示词（Prompt Engineering）
    private static final String SYSTEM_PROMPT = """
            你是一个专业的课程推荐助手，请按以下步骤工作：
            1. 收集用户信息：年龄、学历、编程基础、兴趣方向
            2. 根据信息推荐最合适的3门课程
            3. 当用户说"立即下单"时生成订单
            
            回复格式要求：
            - 信息收集阶段用"请告诉我您的xx"
            - 推荐时显示课程名称、价格、适用人群
            - 订单包含课程名称、价格、支付链接
            """;

    public AICourseAssistant(String apiKey) {
        // 配置客户端（使用课程中提到的代理地址）
        client = OpenAIOkHttpClient.builder()
                // .baseUrl("https://api.chatanywhere.tech/v1")
                // .apiKey(System.getenv("OPENAI_API_KEY"))
                .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
                .apiKey(apiKey)
                .build();
        // 初始化系统消息
        chatHistory.add(ChatCompletionMessageParam.ofSystem(ChatCompletionSystemMessageParam.builder()
                .content(SYSTEM_PROMPT).build()));
    }

    public String chat(String userInput) {
        try {
            // 添加用户消息
            chatHistory.add(ChatCompletionMessageParam.ofUser(ChatCompletionUserMessageParam.builder()
                    .content(userInput).build()));
            //  构建请求
            ChatCompletionCreateParams createParams = ChatCompletionCreateParams.builder()
                    .model("qwen-plus")
                    .messages(chatHistory)
                    .build();

            // 获取响应
            String respond = client.chat().completions()
                    .create(createParams)
                    .choices()
                    .stream()
                    .flatMap(choice -> choice.message().content().stream())
                    .collect(Collectors.joining("\n"));

            //  添加助手消息到历史
            chatHistory.add(ChatCompletionMessageParam.ofAssistant(ChatCompletionAssistantMessageParam.builder()
                    .content(respond).build()));

            //  业务逻辑处理
            return respond;
        } catch (Exception e) {
            return "系统繁忙，请稍后再试";
        }
    }

    private String processBusinessLogic(String response) {
        if (response.contains("立即下单")) {
            return generateOrder(response);
        }
        return response;
    }

    private String generateOrder(String response) {
        // TODO 模拟订单生成逻辑
        return """
                [模拟订单]
                课程名称：JAVA开发零基础入门
                价格：￥0.01
                支付链接：https://pay.tianji.com/order/20240501
                """;
    }

    public static void main(String[] args) {
        // 从环境变量获取API Key（遵循课程中的安全规范）
        String apiKey = System.getenv("DASHSCOPE_API_KEY");

        AICourseAssistant assistant = new AICourseAssistant(apiKey);

        // 测试对话流程
        String[] testDialogue = {
                "你好，我想学习编程",
                "20岁，本科学历，没有编程基础",
                "对JAVA感兴趣",
                "立即下单"
        };

        for (String input : testDialogue) {
            System.out.println("用户：" + input);
            String response = assistant.chat(input);
            System.out.println("助手：" + response + "\n");
        }
    }
}
